Computer networks are widely used for communication of data and are used to provide many business and personal applications that rely on an exchange of data between computing devices in different locations. The Internet is an example of a widely used communication network. Such networks includes multiple interconnected servers and other devices, to which data may be sent or from which data may be obtained by other devices connected to the network. To enable network communications to be directed to specific devices within the network, each device may be assigned a network address. Each address is typically unique and persistent, meaning that any message sent over the network containing the address for a specific device will always be routed to that device.
Many users of applications that rely on network communication connect to the network as “peers.” In this context, “peer” refers to a platform that may contain hardware and software through which access to the network is obtained, often by a single user. As a result, there can be many more peers in a network than there are other devices, such as servers. Because networks usually have a limited number of addresses available, there are often not enough network addresses for every peer to have a unique network address.
Rather than being assigned a unique and persistent address, each peer conventionally connects to the network through a device, such as a router, that performs network address translation (NAT). The router may have a unique and persistent network address such that messages sent over the network may be addressed to the router. The router, in turn, is connected to multiple peers over a sub-network. Each peer may be assigned an address that is meaningful only within the sub-network.
As the peer sends messages intended for communication over the network, it may insert its sub-network address as the address from which the message was sent. The router receives these messages over the sub-network and forwards them on to the network. Before forwarding the message, the router translates the peer's sub-network address to its own address that is recognized as a valid network address.
Servers and other network devices that process messages may use the address in the message to direct a response to the sender of the original message. Accordingly, the router receives all responses intended for any of the peers connected through its sub-network. The router then forwards these messages over its sub-network, but first translates the address in each incoming message to the sub-network address of the peer intended to receive the message. In this way, each peer can send messages over the network and receive responses.
But, because the address of a peer may not be unique and persistent, it is difficult for a network device to initiate communication with a peer. To initiate communication with a peer, another peer or network device would need to discover an address that can be used to send messages to that peer.
One way that the need for address discovery is avoided is through the use of a store-and-forward messaging system. A store-and-forward messaging system employs a relay server having a unique and persistent address within the network. Messages intended for a peer may be sent to the relay server, which stores the messages. The relay server waits for the peer for which the message is intended to send a message to the relay server requesting any stored messages intended for the peer. Such a message will include an address the relay server may use to direct a response to the peer and the relay server can transmit any stored messages intended for the peer as a response to that message.
For a store-and-forward system to work, the relay server must have a way to identify specific peers for which messages are intended. To identify peers, the relay server may establish its own addressing mechanism. Because such addresses are not used as network addresses, the relay server is unconstrained by any limitations on the available number of network addresses in assigning addresses.
E-mail is an example of a store-and-forward messaging system in widespread use. Every user of an e-mail service has an e-mail address, which can be used by both the relay server and other peers to route messages to a peer from which a user accesses the e-mail system.
Other network addressing mechanisms are known. Some messaging providers use networks for which a network address is assigned to every peer. For example, the cellular phone system assigns a unique and persistent address (i.e., the phone number) to every peer, allowing text messages in SMS format to be sent from one peer to another without the intervention of a relay server.
As another example, instant messaging uses a different approach to provide realtime transmission of messages to peers. In an instant messaging format, peers that are available to receive messages identify themselves to a relay server operated by a messaging provider. Once the relay server obtains an address through which messages may be sent to a peer, that address may be provided to other peers wanting to communicate with that peer.